Amazon SageMaker ドメイン作成時に設定が必要な各パラメータを解説
はじめに
Amazon SageMaker Studioを利用する場合、Amazon SageMaker Domain(以降、ドメイン)をセットアップする必要があります。
私がマネジメントコンソール上で、初めてドメインをセットアップしようとした際、各パラメータの意味が理解できなかったため、ドメインの構成をもとにパラメータを解説します。
また、ドメインを作成することで、自動作成されるリソースもありますので、ドメインを作成されたことがない方に参考になれば幸いです。
StudioやRStudio Workbenchの設定ではなく、ドメイン作成時の全般的なパラメータのみを解説します。
ドメイン構成について
ドキュメントに記載されているドメインの構成は、以下の通りです。
SageMaker Studioでは、以下の図の通り「JupyterServer」と「KernelGateway」の2種類のアプリケーションをEC2インスタンス(=ノートブックインスタンス)上のDockerコンテナで実行します。
- JupyterServer
- UI表示用のサーバです。各ユーザは1つのドメインに1つ持ちます。ユーザがウェブブラウザからアクセスすると、コンテナで実行されているNotebook Serverに接続します。
- KernelGateway
- 実際にカーネルを実行する環境で、各ユーザは1つのドメインに複数の KernelGatewayを同時に実行できます。
実際の画面を見てみる
まずは、マネジメントコンソールから、ドメイン作成時の実際の画面をみてみます。
設定するパラメータは、以下です。
- ドメイン名
- 認証
- デフォルトの実行ロール
- インターネット経由の有無
- VPC
- サブネット
- セキュリティグループ
- KMS
ドメイン名は、適当でよいです。
認証方法は、AWS IAM Identity Center もしくは、AWS IAMです。
デフォルトの実行ロールから解説します。
IAMロール
まず、抑えるべきポイントは、SageMakerで利用されるIAMロールは、主に3つある点です。
- ドメインの実行用IAMロール(デフォルトの実行ロール)
- サービスリンクロール
- ドメイン内のユーザー用の実行ロール
ドメインの実行用IAMロール
ドメインの実行用IAMロールは、SageMakerのAPIやAmazon S3などの他のAWSのサービスにアクセスする際に利用されます。
ドメイン作成時に設定する場合、頭にAmazonSageMaker
がついているIAMロール名から選択できます。
サービスリンクロール
サービスリンクロールは、AWSのサービスにリンクされているサービスロールの一種であり、ユーザーに代わってアクションを実行するロールです。
サービスリンクロールは、初回のサービス利用時に自動的に作成されます。
ドメイン作成時、EFSやセキュリティグループなどのAWSリソースは自動で作成されますが、その際にサービスリンクロールが利用されます。
SageMakerノートブックインスタンス用のサービスリンクロールの名前は、AWSServiceRoleForAmazonSageMakerNotebooks
です。
ユーザー側で、ロールにアタッチされているポリシーは確認できますが、編集はできません。
ドメイン内のユーザー用の実行ロール
Amazon SageMaker Studioのドメイン内の各ユーザーには、ユーザーごとに実行ロールを設定します。
この実行ロールは、ユーザーがStudio環境内で実行できるアクションを制御します。
つまり、Studio内でユーザーがノートブックインスタンスなどのリソースを作成する際に、SageMakerがそのユーザーの代わりに引き受ける実行ロールです。
ネットワークとストレージのセクション
続いて、ネットワークとストレージのセクションの以下5点を解説します。
- インターネット経由の有無
- VPC
- サブネット
- セキュリティグループ
- KMS
インターネット経由の有無
ネットワーク構成は、以下の2つに分かれます。
- パブリックインターネットのみ
- VPC のみ
どちらの場合でも、 ドメインは、AWS側で管理されたアカウント内で作成されます。
パブリックインターネットのみ
ノートブックインスタンスから、AWS側で管理されたアカウント内のインターネットゲートウェイ経由で、ユーザーアカウント内のSageMaker APIやCloudWatch Logs、S3バケットにアクセスします。
また、ドメイン作成時に選択したVPCのサブネット上に、EFSとセキュリティグループが作成されます。
VPCのみ
ノートブックインスタンスから、AWS側で管理されたアカウント内のインターネットゲートウェイのルーティングは無効です。
図に示すように、ユーザーアカウント内のVPCエンドポイント経由で、SageMaker APIやCloudWatch Logs、S3バケットにアクセスします。
ユーザーアカウント内のパブリックサブネットにNAT Gatewayを設置することで、インターネット経由で、SageMaker APIやCloudWatch Logs、S3バケットにアクセスすることも可能です。
VPC
インターネット経由の有無で説明した通り、どのVPC上にEFSのマウントターゲットを作成するか選択します。
サブネット
インターネット経由の有無で説明した通り、どのサブネット上にEFSのマウントターゲットを作成するか選択します。
ノートブックインスタンスからEFSのマウントターゲットへのアクセスは、インターネット経由ではないので、プライベートサブネットを選択しましょう。
セキュリティグループ
ドメイン作成時に設定するセキュリティグループは、Studio を起動すると作成されるノートブックインスタンス(JupyterServerやKernelGateway)にとEFSのマウントターゲットで利用されます。
用途は、パブリックインターネットのみ、VPCのみの設定で異なります。
パブリックインターネットのみ
用途としては、ノートブックインスタンスからEFSのマウントターゲットにアクセスするためです。
ドメイン作成時、設定画面から、セキュリティグループは選択しなくて構いません。
理由は、ドメイン作成時に、EFSのマウントターゲット用とノートブックインスタンス用、合計2つセキュリティグループが自動作成されるためです。
後でドメインを作成しますので、その際に確認してみましょう。
VPCのみ
用途としては、以下の2点です。
- ノートブックインスタンスからEFSのマウントターゲットにアクセスする
- ノートブックインスタンスからSageMaker APIやCloudWatch Logs、S3バケットにアクセスする
ドメイン作成時、設定画面から、セキュリティグループの選択が必須です。
理由としては、ユーザーアカウント内のVPCエンドポイントやNATGatewayを設置したインターネット経由で、SageMaker APIやCloudWatch Logs、S3バケットにアクセスするため、アウトバウンドを許可したセキュリティグループが必要です。
後で実際の画面を見ながら確認します。
KMS
デフォルトでは、AWSマネージド型キーを使いEFSとEBSを暗号化します。
カスタマー管理型キーを使用するには、キーID または ARN を入力します。
SageMaker StudioとEFS、EBSの関係性は以下の通りです。
- EFS
- ノートブックインスタンス用のストレージです。
- ドメイン内の各ユーザーは、ドメインに関連付けられたEFS上で個別のホームディレクトリを利用します。
- EFSは、ドメインやノートブックインスタンスが削除された後も残ります
- EBS
- カーネル実行環境(KernelGateway)のノートブックインスタンスにEBSボリュームがアタッチされます。
- EBSは、ノートブックインスタンスが終了すると削除されます。
作成してみる
今回は、とりあえずSageMaker Studioを試してみたい、という目的で必要な機能が最小限の設定で作成します。
サブネットはプライベートサブネットを選択し、セキュリティグループ(new-sg)は、なくても問題ないですが、確認のため設定します。
パブリックインターネットのみを選択します。
後で、VPCのみを選択した場合も後で解説します
他の設定は不要のため、設定をオフにします。
ドメイン作成後に、ノートブックインスタンスを起動してみる
ドメインにユーザーを追加し、Studioを起動すると、JupyterServer(UIサーバー)が起動します。
起動をクリックすると、別タブで「Creating the JupyterServer application」の画面に遷移します。
ノートブックを作成してみます。
無事に立ち上がりました。
ドメイン作成後に、自動作成されるリソース
今回のドメイン設定で、自動作成されるリソースは、セキュリティグループとEFSの2つです。
セキュリティグループ
セキュリティグループは、2つ自動作成されました。
- security-group-for-inbound-nfs-ドメインID
- EFSのマウントターゲットにアタッチされます
- ノートブックインスタンスからのインバウンドのみを許可してます
- security-group-for-outbound-nfs-ドメインID
- ノートブックインスタンスが利用します
- EFSのマウントターゲットへのアウトバウンドのみを許可しています。
security-group-for-inbound-nfs-ドメインID
セキュリティグループ | プロトコル | ポート | 送信先 |
---|---|---|---|
インバウンド | TCP | 2049 | security-group-for-outbound-nfs-ドメインID |
アウトバウンド | なし | なし | なし |
security-group-for-outbound-nfs-ドメインID
セキュリティグループ | プロトコル | ポート | 送信先 |
---|---|---|---|
インバウンド | なし | なし | なし |
アウトバウンド | TCP | 2049 | security-group-for-inbound-nfs-ドメインID |
セキュリティグループの説明にも記載があるように、削除してはいけません。
ドメイン作成時に選択したセキュリティグループ
ドメイン作成時に設定したセキュリティグループ(new-sg)は、ノートブックインスタンス(JupyterServerとKernelGateway)にアタッチされていました。
自動でアタッチされるため、便利ですね。
security-group-for-inbound-nfs-ドメインID
もアタッチされているので、パブリックインターネットのみの場合、セキュリティグループ(new-sg)の追加は不要だと分かります。
EFS
設定したサブネットに対して、EFSとEFSのマウントターゲットが作成されていました。
また、セキュリティグループ(security-group-for-inbound-nfs-ドメインID
)がアタッチされております。
ノートブックインスタンスを削除してみる
ノートブックインスタンス2つ(KernelGatewayとJupyterServer)を削除します。
ENIも削除されていることが確認できました。
ドメインをVPCのみの設定で作成する場合
先程は、パブリックインターネットのみの設定でドメインを作成しました。
VPCのみで設定した場合の違いを解説します。
違いは1点で、セキュリティグループのアタッチが必須です。
理由としては、ノートブックインスタンスから、ユーザーアカウント内のSageMaker APIやCloudWatch Logs、S3バケットにアクセスする経路が異なるためです。
ユーザーアカウント内のVPCエンドポイントやNATGatewayを設置したインターネット経由で、SageMaker APIやCloudWatch Logs、S3バケットにアクセスするため、アウトバウンドを許可したセキュリティグループが必要です。
そのため、アウトバウンドがVPCエンドポイントのセキュリティグループを許可したり、0.0.0.0/0の設定でセキュリティグループを作成し、ドメイン設定時に選択しましょう。
再掲
最後に
Amazon SageMaker ドメイン作成時に設定するパラメータについて解説しました。
ドメイン作成時に、入力するパラメータの意味や自動で作成されるリソースが初見だと分かりにくいため、参考になれば幸いです。